﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

//求最⼩公倍数（数学）
//https://www.nowcoder.com/practice/22948c2cad484e0291350abad86136c3?tpId=37&tqId=21331&ru=/exam/oj

//long long lcm(long long a, long long b)
//{
//    long long c = a % b;
//    while (c > 0)
//    {
//        a = b;
//        b = c;
//        c = a % b;
//    }
//    return b;
//}
//
//long long gcd(long long a, long long b)
//{
//    return a * b / lcm(a, b);
//}
//
//int main()
//{
//    long long a, b;
//    cin >> a >> b;
//    cout << gcd(a, b);
//}


// 数组中的最⻓连续⼦序列（排序 + 模拟）
//https://www.nowcoder.com/practice/eac1c953170243338f941959146ac4bf?tpId=196&tqId=37143&ru=/exam/oj


//class Solution {
//public:
//    int MLS(vector<int>& arr) 
//    {
//        sort(arr.begin(), arr.end());
//        int prev = 0, cur = 1, ret = 1;
//        while (prev != arr.size())
//        {
//            int tmp = 1;
//            while (prev != arr.size()&&
//                (arr[prev] + 1 == arr[prev + 1] || arr[prev] == arr[prev + 1]))
//            {
//                if (arr[prev] + 1 == arr[prev + 1])
//                    tmp++;
//                prev++;
//            }
//
//            if (tmp > ret)
//                ret = tmp;
//
//            if (prev != arr.size())
//                prev++;
//        }
//
//        return ret;
//    }
//};


//字⺟收集（动态规划 - 路径问题）
//https://www.nowcoder.com/practice/9740ce2df0a04399a5ade1927d34c1e1?tpId=230&tqId=38954&ru=/exam/oj

//int dp[505][505];
//char map[505][505];
//int m, n;
//
//int main()
//{
//	cin >> m >> n;
//	for (int i = 1; i <= m; i++)
//	{
//		for (int j = 1; j <= n; j++)
//		{
//			cin >> map[i][j];
//		}
//	}
//
//	for (int i = 1; i <= m; i++)
//	{
//		for (int j = 1; j <= n; j++)
//		{
//			int tmp = 0;
//			if (map[i][j] == 'l')
//				tmp = 4;
//			if (map[i][j] == 'o')
//				tmp = 3;
//			if (map[i][j] == 'v')
//				tmp = 2;
//			if (map[i][j] == 'e')
//				tmp = 1;
//
//			//dp[1][1] = max(dp[0][1], dp[1][0]) + tmp;
//			dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + tmp;
//		}
//	}
//
//	cout << dp[m][n] << endl;
//	return 0;
//}